<?php

namespace App\Services\User;

use \App\Services\User\Role\RoleLogin;
/**
 * 角色管理的逻辑层
 */
class Role
{
    // 增加一条角色记录
    public function add(array $data): array
    {
        $data = init_array($data,['name' => ' ', 'name_cn' => ' ']);

        ValidateRole::checkValidate($data,['name','name_cn']);
        return (new RoleLogin())->add($data);
    }
    // 禁用一个角色
    public function stop(array $data): array
    {
        ValidateRole::checkValidate($data,['id','name']);
        return (new RoleLogin())->stop($data);
    }
    // 启用一个角色
    public function start(array $data): array
    {
        ValidateRole::checkValidate($data,['id','name']);
        return (new RoleLogin())->start($data);
    }
    // 按分页获取角色列表
    public function list(array $data): array
    {
        $data = init_array($data,['page' => 1, 'list_rows' => '', 'status' => '']);

        return (new RoleLogin())->list($data);
    }
    // 编辑用户角色名,权重,和附加菜单信息
    public function edit(array $data): array
    {

        if(!isset($data['name']) && !isset($data['name_cn'])&& isset($data['weight']) && isset($data['menu']))
        {
            return verify_err($data, 'name,name_cn,weight和menu四个参数至少要传一个');
        }
        $data = init_array($data,['id'=>0]);

        ValidateRole::checkValidate($data,['id', 'name', 'name_cn', 'weight', 'menu']);
        return (new RoleLogin())->edit($data);
    }
    // 根据用户的角色集获取其对应的IDS
    public function getIdsByRoles(array $data): array
    {
        $data = init_array($data,['roles' => ' ']);

        ValidateRole::checkValidate($data,['roles']);
        return (new RoleLogin())->getIdsByRoles($data);
    }
    // 用户申请某个角色
    public function apply(array $data): array
    {
        $data=  init_array($data,['app_id' => '0', 'user_id' => '0', 'role_id' => '0', 'apply_info' => '{}']);
        if ('{}' === $data['apply_info']) {
            return verify_err(null, '请提交apply_info信息');
        }else if(is_array($data['apply_info'])) {
            $data['apply_info'] = json_encode($data['apply_info']);
        }
        ValidateRole::checkValidate($data,['app_id','user_id', 'role_id', 'apply_info']);
        return (new RoleLogin())->apply($data);
    }
    // 获取当前可以申请的角色
    public function allowApply(array $data): array
    {
        $data=  init_array($data,['app_id' => '0','user_id' => '0']);

        ValidateRole::checkValidate($data,['app_id', 'user_id']);
        return (new RoleLogin())->allowApply($data);
    }
//    // 根据角色的ids查找其英文名,中文名,id
//    private function _listByIds(string $allow_role_ids): array
//    {
//        $_where['id'] = ['in', $allow_role_ids];
//        $list = $this->db()->field('id,name,name_cn')->where($_where)->select();
//        return auto_return($list, '成功获取角色列表', '获取角色列表失败');
//    }
    // 审核用户申请的角色
    public function audit(array $data): array
    {
        $data=  init_array($data,['id' => '0','pass_user_id' => '0']);
        return (new RoleLogin())->audit($data);
    }
    // 获取不分页的所有角色列表
    public function all(): array
    {
        return (new RoleLogin())->all();
    }
    // 获取某一应用下的所有的角色列表
    public function allRolesByApp(array $data): array
    {
        $data = init_array($data,['id' => '', 'name' => '', 'app_key' => '']);

        return (new RoleLogin())->allRolesByApp($data);
    }
    // 获取某个角色的详情
    public function getRoleInfo($data): array
    {
        $data = init_array($data,['id'=>0]);

        return (new RoleLogin())->getRoleInfo($data);
    }
}
